namespace Crux.Core.LangChain.Abstractions.Embeddings;
/// <summary>
/// 
/// </summary>
public interface IEmbeddingGenerationService<TValue, TEmbedding>
    where TEmbedding : unmanaged
{
    /// <summary>
    /// 
    /// </summary>
    /// <param name="data"></param>
    /// <param name="dimensions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<IList<TEmbedding[]>> GenerateEmbeddingsAsync(
        IList<TValue> data,
        int dimensions = 1536,
        CancellationToken cancellationToken = default);
    /// <summary>
    /// 
    /// </summary>
    /// <param name="data"></param>
    /// <param name="dimensions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<TEmbedding[]> GenerateEmbeddingAsync(
        TValue data,
        int dimensions = 1536,
        CancellationToken cancellationToken = default);
}